The present invention relates to computer coding methods, and more specifically to methods of organizing and retrieving software tool configurations from analysis of software repositories.
With the rapid emergence of cloud and mobile computing, the processes and mechanisms through which software is developed and deployed have seen dramatic transformations. The competitive pressure on businesses today is tremendous, and enterprises are quickly transforming their culture and practices to an agile, continuous delivery, DevOps-oriented approach to development. Along with culture and practices, a key component of enabling continuous delivery is the set of tools that engineers use for all aspects of the development lifecycle, including design, coding, deployment, testing, management, monitoring, and data analysis. This set of tools is often referred to as a “toolchain”.
With the proliferation of tools and a virtually infinite combination of tools that a team can implement to compose a toolchain, as well as the need for automation as part of a DevOps story for enabling innovation and quick bootstrapping of new projects, systems are needed and being developed for automated provisioning and configuration of tools in a toolchain. These systems can provide additional value beyond provisioning, to allow rich integrations and messaging between the tools. For example, notifications to a persistent chat channel are posted as a result of tooling events, such as code commits in a repository tool, build results and failures in a continuous integration tool, etc. Many such pair-wise integrations between tools exist in the industry today.
The task of discovering, researching, selecting, procuring, installing, and configuring tools appropriate to a given software development project can be complex and time consuming, as can be the work to “on board” new developers to an existing project with an established toolchain. In the formative phase of a software project, a team may begin by provisioning a toolchain from an existing “toolchain template” that at least approximates the anticipated needs of the project—the programming languages and run-times to be employed, the test frameworks and techniques of importance, the manners in which the project members will collaborate, and so forth. With the toolchain so provisioned, the team can begin development and continuous delivery proper.
However, in many cases the software project already exists in the form of source code in repositories. Repositories are used to contain code, build scripts, test suites, manifests, and other files constituting some or all of the assets of a software project, as well as a history of changes and contributions to those assets. Repositories as presently implemented imply, at best, ad-hoc, and at worst no agreed-to portfolio of tools.
The aforementioned complexity and tedium of assembling a best-of-breed toolchain is exacerbated by having to investigate the source code repositories as critical input into researching the broad canvas of possible tools and ultimately choosing tools that will support the project and integrate well with each other. In short, assembling an effective toolchain from existing source code collateral can be a massive undertaking.
Indicators are patterns of data in the files or history of collection of source code and other software artifacts such as in a file system, archive or repository that suggest the actual or potential use of a technology (tool). For example, JavaScript that requires ‘wd’ or ‘selenium-webdriver’ indicates the use of Selenium® software from Software Freedom Conservancy, Inc. of Brooklyn, N.Y., and the potential use of the Sauce Labs® system from Sauce Labs Inc. of San Francisco, Calif., for software testing.
GitHub®, a software package from GitHub Inc. of San Francisco, Calif., is software for program development and editing which uses Linguist to examine repositories and determine the source language. This information is then used to control built-in editor behavior. Linguist does not characterize other non-language repository contents, such as indications of test frameworks used.
Cloud Foundry®, from Cloud Foundry.org Foundation, Inc. of San Francisco, Calif., is a software package for deploying and managing applications. A Cloud Foundry buildpack includes a “detect” script that examines the files of an application to determine if the application is meaningful to the buildpack or not. This is used to select a run-time for the application in isolation of any other applications. It does not examine other contents in the repository, such as test frameworks.